/**
 * 日期时间工具函数
 * 提供时间戳转换、日期格式化等功能
 */

/**
 * 将时间戳转换为指定格式的日期时间字符串
 * @param {number|string} timestamp - 时间戳（秒或毫秒）
 * @param {string} format - 输出格式，默认为 'YYYY.MM.DD HH:mm:ss'
 * @returns {string} 格式化后的日期时间字符串
 */
export function formatTimestamp(timestamp, format = 'YYYY.MM.DD HH:mm:ss') {
  if (!timestamp) return ''
  
  // 确保时间戳是数字类型
  let ts = Number(timestamp)
  
  // 判断是秒还是毫秒时间戳（10位是秒，13位是毫秒）
  if (ts.toString().length === 10) {
    ts = ts * 1000
  }
  
  const date = new Date(ts)
  
  // 检查日期是否有效
  if (isNaN(date.getTime())) {
    return ''
  }
  
  return formatDate(date, format)
}

/**
 * 格式化日期对象
 * @param {Date} date - 日期对象
 * @param {string} format - 格式字符串
 * @returns {string} 格式化后的日期字符串
 */
export function formatDate(date, format = 'YYYY.MM.DD HH:mm:ss') {
  const year = date.getFullYear()
  const month = String(date.getMonth() + 1).padStart(2, '0')
  const day = String(date.getDate()).padStart(2, '0')
  const hours = String(date.getHours()).padStart(2, '0')
  const minutes = String(date.getMinutes()).padStart(2, '0')
  const seconds = String(date.getSeconds()).padStart(2, '0')
  
  return format
    .replace('YYYY', year)
    .replace('MM', month)
    .replace('DD', day)
    .replace('HH', hours)
    .replace('mm', minutes)
    .replace('ss', seconds)
}

/**
 * 获取当前时间戳（秒）
 * @returns {number} 当前时间戳（秒）
 */
export function getCurrentTimestamp() {
  return Math.floor(Date.now() / 1000)
}

/**
 * 获取当前时间戳（毫秒）
 * @returns {number} 当前时间戳（毫秒）
 */
export function getCurrentTimestampMs() {
  return Date.now()
}

/**
 * 将时间戳转换为相对时间（如：刚刚、5分钟前、1小时前等）
 * @param {number|string} timestamp - 时间戳
 * @returns {string} 相对时间字符串
 */
export function getRelativeTime(timestamp) {
  if (!timestamp) return ''
  
  const now = getCurrentTimestamp()
  const ts = Number(timestamp)
  const diff = now - ts
  
  if (diff < 60) {
    return '刚刚'
  } else if (diff < 3600) {
    return `${Math.floor(diff / 60)}分钟前`
  } else if (diff < 86400) {
    return `${Math.floor(diff / 3600)}小时前`
  } else if (diff < 2592000) {
    return `${Math.floor(diff / 86400)}天前`
  } else {
    return formatTimestamp(timestamp, 'YYYY.MM.DD')
  }
}

/**
 * 检查时间戳是否为今天
 * @param {number|string} timestamp - 时间戳
 * @returns {boolean} 是否为今天
 */
export function isToday(timestamp) {
  if (!timestamp) return false
  
  const ts = Number(timestamp)
  const date = new Date(ts * 1000)
  const today = new Date()
  
  return date.toDateString() === today.toDateString()
}

/**
 * 检查时间戳是否为昨天
 * @param {number|string} timestamp - 时间戳
 * @returns {boolean} 是否为昨天
 */
export function isYesterday(timestamp) {
  if (!timestamp) return false
  
  const ts = Number(timestamp)
  const date = new Date(ts * 1000)
  const yesterday = new Date()
  yesterday.setDate(yesterday.getDate() - 1)
  
  return date.toDateString() === yesterday.toDateString()
}

/**
 * 获取时间戳对应的星期几
 * @param {number|string} timestamp - 时间戳
 * @returns {string} 星期几
 */
export function getWeekday(timestamp) {
  if (!timestamp) return ''
  
  const ts = Number(timestamp)
  const date = new Date(ts * 1000)
  const weekdays = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']
  
  return weekdays[date.getDay()]
}

/**
 * 便捷函数：格式化时间戳为默认格式
 * @param {number|string} timestamp - 时间戳
 * @returns {string} 格式化后的日期时间字符串
 */
export function formatTime(timestamp) {
  return formatTimestamp(timestamp, 'YYYY.MM.DD HH:mm:ss')
}

/**
 * 便捷函数：只显示日期
 * @param {number|string} timestamp - 时间戳
 * @returns {string} 格式化后的日期字符串
 */
export function formatDateOnly(timestamp) {
  return formatTimestamp(timestamp, 'YYYY.MM.DD')
}

/**
 * 便捷函数：只显示时间
 * @param {number|string} timestamp - 时间戳
 * @returns {string} 格式化后的时间字符串
 */
export function formatTimeOnly(timestamp) {
  return formatTimestamp(timestamp, 'HH:mm:ss')
}

/**
 * 获取当前年份
 * @returns {number} 当前年份，例如 2025
 */
export function getCurrentYear() {
  return new Date().getFullYear()
}

/**
 * 格式化日期范围为友好显示
 * @param {number|string} startTimestamp - 开始时间戳
 * @param {number|string} endTimestamp - 结束时间戳
 * @returns {string} 格式化后的日期范围字符串
 */
export function formatDateRange(startTimestamp, endTimestamp) {
  if (!startTimestamp || !endTimestamp) return ''
  
  const startDate = new Date(Number(startTimestamp) * 1000)
  const endDate = new Date(Number(endTimestamp) * 1000)
  
  const startMonth = startDate.getMonth() + 1
  const startDay = startDate.getDate()
  const endMonth = endDate.getMonth() + 1
  const endDay = endDate.getDate()
  
  // 如果开始和结束是同一年
  if (startDate.getFullYear() === endDate.getFullYear()) {
    // 如果是同一个月
    if (startMonth === endMonth) {
      return `${startMonth}月${startDay}日 - ${endDay}日`
    } else {
      return `${startMonth}月${startDay}日 - ${endMonth}月${endDay}日`
    }
  } else {
    // 跨年显示
    return `${startDate.getFullYear()}.${startMonth}.${startDay} - ${endDate.getFullYear()}.${endMonth}.${endDay}`
  }
}

/**
 * 格式化单个日期为友好显示
 * @param {number|string} timestamp - 时间戳
 * @returns {string} 格式化后的日期字符串，如 "8月8日"
 */
export function formatFriendlyDate(timestamp) {
  if (!timestamp) return ''
  
  const date = new Date(Number(timestamp) * 1000)
  const month = date.getMonth() + 1
  const day = date.getDate()
  
  return `${month}月${day}日`
} 